【Golang零基础入门】04 函数与方法

纯函数

独立存在,不依附于任何实体,没有接收者

1
2
3
4
5
package helper

func SayHi(name string) {
fmt.Printf("Hi %s", name)
}

方法

与函数不一样的,在定义的时候,会与接收者绑定在一起。

1
2
3
4
5
6
7
8
9
10
11
12
type human struct {
name string
}

(h human)func SayHi() string {
return "Hi " + h.name
}

func main(){
h := Human{name:"lee"}
fmt.Println(h.SayHi())
}

与函数对比,应该可以看到,在函数func声明之前增加的(h human),这个就是接收者,每一个humman绑定了该方法,类似面向对象里的成员函数。

值接收&指针接收

  1. 值接收者,在调用的时候是值接收者的一个副本,所以对该值的任何修改,不会影响原来的类型变量。
  2. 指针接收者传递的是一个指向原值指针的副本,所以修改时,同时也会影响原来类型变量的值。
1
2
3
4
5
6
7
8
9
// 值接收,不能修改原值
(h human)func set(){
h.name = "can not set"
}

// 指针接收,能修改原值
(h *human)func modify(){
h.nam = "can modify"
}

多值返回

Go的函数方法支持多值返回,例如标准库中,很多都是返回两个值,一个是返回值,一个是出错时的错误信息,这就是我们经常看到下面这段代码的原因。

1
2
3
4
5
6
7
8
if err != nil {
// do something
}

// 我们定义方法
func modify(name string)(string, error){
return name, nil
}
您的支持将鼓励我继续创作!